<?php

namespace Framework;

class Session {


    /**
     * 开启会话
     * 如果会话未开始，则开始一个新的会话
     *
     * @return void
     */
    public static function start() {
        if (session_status() == PHP_SESSION_NONE) {
            session_start();
        }
    }


    /**
     * 设置会话键值
     *
     * @param $key
     * @param $value
     * @return void
     */
    public static function set($key, $value) {
        $_SESSION[$key] = $value;
    }

    /**
     * 通过键获取会话值
     *  如果指定的键存在，则返回其值
     *
     * @param $key
     * @param $default
     * @return void
     */
    public static function get($key, $default = null) {
        return isset($_SESSION[$key]) ? $_SESSION[$key] : $default;
    }

    public static function has($key) {
        return isset($_SESSION[$key]);
    }


    public static function clear($key) {
        if (isset($_SESSION[$key])) {
            unset($_SESSION[$key]);
        }
    }

    /**
     * 清空session
     *
     * @return void
     */
    public static function clearAll() {
        session_unset();
        session_destroy();
    }


    /**
     * 设置闪存信息
     *
     * @param $key
     * @param $message
     * @return void
     */
    public static function setFlashMessage($key, $message) {
        // 调用 set 方法将消息存储在会话中，键名前加上 ‘flash_’ 前缀以区分
        self::set('flash_' . $key, $message);
    }


    public static function getFlashMessage($key, $default = null) {
        $message = self::get('flash_' . $key, $default);
        // 删除会话中的信息，确保它只读1次
        self::clear('flash_' . $key);
        return $message;
    }
}